const cheerio = require('cheerio');
const R = require('request');
const S = require('superagent');
const iconv=require('iconv-lite');

let GG=null;

function data_callback(data){
    GG=data;
}

var self={
    /**
     * 采集接口
     * @param url 需要采集内容的页面网址
     * @param area 需要采集的内容区域、可以为null
     * @param tag 需要采集的目标对象
     * @param attr 需要采集的目标对象的属性值、或者文本、html内容
     * @returns {Promise}
     */
    collect({url,area,tag,attr=[{attr:"text",child:"",name:"content"}]}){
        return new Promise(function(y,n){
            R(url, function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    let result=[],
                        $tag,
                        $ = cheerio.load(body);

                    if(area){
                        $tag=$(tag,area);
                    }else{
                        $tag=$(tag);
                    }

                    $tag.each(function(){
                        var _temp={},
                            _this=$(this);
                        attr.map(function(item){
                            const {attr,name,child}=item;
                            let _t=_this;
                            if(child){
                                _t=_this.find(child)
                            }
                            if(attr=="text"){
                                _temp[name]=_t.text()
                            }else if(attr=="html"){
                                _temp[name]=_t.html()
                            }else{
                                _temp[name]=_t.attr(attr)
                            }
                        })
                        result.push(_temp);
                    })
                    y(result)
                }else{
                    n(error)
                }
            })

        })
    },

    jsonp({jsonp,callback}){
        global[callback]=function(data){
            GG=data;
        }
        return new Promise(function(y,n){
            R.get({url:jsonp,encoding:null},function(error,response,body){
                var  html  = iconv.decode(body, 'gb2312');
                eval(html);
                y(GG)
            });
        })

    }

}
module.exports=self;